#Requires AutoHotkey v2.0

; 粘贴辅助窗口(静态)
class AuxWindow{

    static window := Gui()
    static comp := Map() ; 窗口组件
    static ready := false ; 窗口是否就绪
    static shCharNum := 8 ; 显示字符数量

    ; 初始化，参数textArray 文本数组 index 当前数组项
    static init(){
        
        global clip ; 声明全局变量

        ; 设置字体
        this.window.SetFont("s10 q5","SimSun")
        this.window.MarginX := 2

        ; 添加组件

        this.comp["tip"] := this.window.Add("text","Left Section -Wrap h20 ReadOnly","当前")
        this.comp["tip"].Move(0,10)
    
        this.comp["edit"] := this.window.Add("Edit"," w100 -Wrap h20 YS Right","1/15")

        this.comp["ud"] := this.window.Add("Updown","w4")

        this.comp["jump"] := this.window.Add("Button","-Wrap h20 YS ","跳转")

        this.comp["text"] := this.window.Add("text","Wrap h20 center XS w176 cFF0000 ",clip.defText)

        this._processData()
        
        ; 绑定事件
        this.comp["jump"].OnEvent("Click", (g,e) => this._onClick_jump(g,e))

    }

    ; 处理数据
    static _processData(){

        global clip ; 声明全局变量
        if(clip.texts.length != 0){ ;如果有数据

            this.comp["edit"].value := clip.index "/" clip.texts.Length
            this.comp["text"].value := clip.texts[clip.index] " [" this.comp["edit"].value "]"
        }
    
    }

    ; 事件函数
    static _onClick_jump(GuiCtrl, EventInfo){

        global clip ; 声明全局变量
        
        ; 更新数据
        ;this._processData()

        index := ""
        length := ""

        oStr := this.comp["edit"].value
        
        if(!oStr){ ; 没有数据
            return
        }

        mark := false ; 标记分割符

        ; 找到斜杠的位置(提取两个值)
        loop parse oStr{

            if(mark){
                length := length A_LoopField
                continue
            }

            if(A_LoopField == "/"){
                mark := true
                continue
            } else{
                index := index A_LoopField
            } 
        }
        
        msgBox "跳转功能待完善[" index "/" length "]"
        if(!length){
            length := clip.texts.length
            this.comp["edit"].value := index "/" length
        }

        if(index < 1){
            index := 1
            this.comp["edit"].value := index "/" length
        }
        
        if(index > length){
            index := 1
            this.comp["edit"].value := index "/" length
        }

        clip.index := index

        if(clip.texts[clip.index]){ ; 如果有数据
            ; 保留前10个字符 加上文本的位置
            this.comp["text"].value := SubStr(clip.texts[clip.index],1,this.shCharNum) " [" this.comp["edit"].value "]"
        } else{
            this.comp["text"].value := clip.defText
        }
        
    }
    
    ; 显示&隐藏窗口
    static toggle(){

        global clip ; 声明全局变量
        
        ; 窗口是否显示
        static display := false
    
        ; 如果窗口没有创建，创建它
        if(!this.ready){
            this.init()
            this.ready := true ; 标记文件已经创建好了
        }
    
        ; 窗口隐藏，显示它; 窗口显示，隐藏它
        if(display){
            this.window.Hide()
            display := false
        }else{
            this.window.show() ; 显示窗口
            display := true
        }
    }
}
